package com.naiterui.ehp.bs.doctor.dao.mongo;

import com.naiterui.ehp.bs.doctor.prodocl.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 负责消息数据的持久化和消息数据的获取
 * <p>
 * File name : MessageDao.java
 * </P>
 * <p>
 * Author : zhouyanxin
 * </P>
 * <p>
 * Date : 2015年6月28日
 * </P>
 */
@Repository
public class AdMessageDao extends MongoBaseDao {

    /**
     * 消息记录的collectionName
     */
    private static final String COLLECTION_NAME = "m_message";

    /**
     * 最新咨询记录的collectionName
     */
    private static final String COLLECTION_NAME_LATELY_MESSAGE = "m_message2";

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    protected MongoTemplate getMongoTemplate() {
        return mongoTemplate;
    }

    /**
     * 医生和患者聊天记录
     *
     * @param doctorId
     * @param patientId
     *
     * @return List<Message>
     *
     * @Title MessageDao.getMessageList
     * @Description 获取最新咨询，医生和患者聊天列表
     * @History 2016年7月30日 下午2:06:37 by wangchuan
     */
    public List<Message> getMessageList(Long doctorId, Long patientId) {
        // 查询条件
        Criteria c1 = Criteria.where("from.id").is(doctorId).and("to.id").is(patientId).and("relation").is(1);// 医生to患者
        Criteria c2 = Criteria.where("from.id").is(patientId).and("to.id").is(doctorId).and("relation").is(0);// 患者to医生
        Criteria criteria = new Criteria().orOperator(c1, c2);

        // 分页查询
        return super.queryByPage(COLLECTION_NAME, Message.class, criteria, 1, Integer.MAX_VALUE, "asc", "sendTime");
    }

    /**
     * 获取医生向患者发送的第一条会话信息
     *
     * @param sessionId 会话id
     * @param doctorId  医生id
     * @param patientId 患者id
     * @return
     */
    public Message getFirstSessionMessage(String sessionId, Long doctorId, Long patientId){
        // 查询条件
        Criteria c1 = Criteria.where("from.id").is(doctorId).and("to.id").is(patientId).and("relation").is(1).and("session.sessionId").is(sessionId);// 医生to患者

        Criteria criteria = new Criteria().orOperator(c1);
        List<Message> messages = super.queryByPage(COLLECTION_NAME, Message.class, criteria, 1, 1, "asc", "sendTime");
        if (CollectionUtils.isEmpty(messages)) {
            return null;
        }
        return messages.get(0);
    }
}
